export default {
	namespaced: true,
	state: () => ({
		// 每个商品的信息对象，都包含如下 6 个属性：
		// { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
		cart: JSON.parse(uni.getStorageSync('cart')||'[]')//先拿取本地的数据 如果没有 就为[]
	}),
	mutations: {
		addCart(state, goods) {
			// 在商品中查找是否有传过来的商品对象
			const findRes = state.cart.find(e => e.goods_id == goods.goods_id)
			if (findRes) {
				// 找到就将商品的数量+1
				findRes.goods_count++
			} else {
				// 没有找到就将商品加入
				state.cart.push(goods)
			}
			// console.log(state.cart);
			// 通过 commit 方法，调用 m_cart 命名空间下的 saveToStorage 方法
			this.commit('my_cart/saveStorage')
		},
		// 将数据存储到本地
		saveStorage(state){
			uni.setStorageSync('cart',JSON.stringify(state.cart))
		},
		// 更新商品列表的勾选状态
		updateState(state,goods){
			const findRes=state.cart.find(e=>e.goods_id===goods.goods_id)
			if(findRes){
				findRes.goods_state=goods.goods_state
			}
			//调用本地存储的方法，重新存储数据
			this.commit('my_cart/saveStorage')
		},
		updateGoodsCount(state,goods){
			const findRes=state.cart.find(e=>e.goods_id==goods.goods_id)
			if(findRes){
				findRes.goods_count=goods.goods_count
				this.commit('my_cart/saveStorage')
			}
		},
		updateDeleteGoods(state,goods){
			state.cart=state.cart.filter(e=>e.goods_id!==goods.goods_id)
			this.commit('my_cart/saveStorage')
		},
		// 更新所有商品的勾选状态
		updateAllGoodsState(state,newState){
			// 循环更新每个按钮的勾选状态
			state.cart.forEach(e=>e.goods_state=newState)
			// 将数据存储到本地
			this.commit('my_cart/saveStorage')
		}
	},
	getters: {
		//统计购物车中商品的总数量
		total(state){
			let count=0
			state.cart.forEach(e=>count+=e.goods_count)
			return count
		},
		// 勾选商品的总数
		checkedCount(state){
			let count=0
			state.cart.forEach(e=>{
				if(e.goods_state){
					count+=e.goods_count
				}
			})
			return count
		},
		// 已勾选的商品的总价格
		checkedGoodsAmount(state){
			let count=0
			state.cart.forEach(e=>{
				if(e.goods_state){
					count+=e.goods_price*e.goods_count
				}
			})
			return count.toFixed(2)
		}
	}
}
